perm filename CHAT.MID[NET,MRC]1 blob
sn#570733 filedate 1981-03-06 generic text, type C, neo UTF8
COMMENT ⊗ VALID 00007 PAGES
C REC PAGE DESCRIPTION
C00001 00001
C00002 00002 TITLE CHAT
C00003 00003 INBUFH OUTBFH GOTINT RFCBLK HOST SMRBLK RMRBLK INPBLK CRLF
C00004 00004 CHAT
C00005 00005 CHAT1 CHAT2
C00007 00006 LOOP TTILUP
C00009 00007 TTIDUN TTIDN1 TTIDN2 NTICHR FLUSH CLOSED
C00011 ENDMK
C⊗;
TITLE CHAT
SUBTTL Definitions
; Mark Crispin, SU-AI, February '81
; Prototype Ethernet user TELNET
; AC definitions
A=1
; System bit definitions
INTTTY==020000,, ; TTY input
INTCLK==000200,, ; clock interrupts
INTIMS==000020,, ; closed interrupt
INTINP==000010,, ; input interrupt
IODTER==100000 ; Time out
IOBKTL==040000 ; Mark seen
IODEND==020000 ; End seen
BSACT== 000020 ; activate on BS
SPCBRK==000100,, ; special activation mode
DISLIN==400000,, ; III
DMLIN== 040000,, ; DM
DDDLIN==020000,, ; DD
INTBTS==INTTTY\INTCLK\INTINP\INTIMS
;INBUFH OUTBFH GOTINT RFCBLK HOST SMRBLK RMRBLK INPBLK CRLF
SUBTTL Data area
INBUFH: BLOCK 3 ; input buffer
OUTBFH: BLOCK 3 ; output buffer
TTYBFH: BLOCK 3 ; TTY buffer header
GOTINT: BLOCK 1 ; -1 → got an interrupt
RFCBLK: 0 ; connect to remote host
0 ; status word
1 ; socket number (1 for TELNET)
HOST: 0 ; host
SMRBLK: 2 ; send Mark
0 ; status word
6 ; Timing Mark Reply
RMRBLK: 3 ; read last Mark
0 ; status word
0 ; Mark type returned here
INPBLK: 4 ; skip if input available
0 ; status word
CRLF: ASCIZ/
/
;CHAT
SUBTTL Start of program
CHAT: CAI
RESET ; flush all I/O
OUTSTR [ASCIZ/Host: /]
SETZ A,
INCHWL
CAIN "?
JRST HELP
CAIE "I ; IFS?
CAIN "i
MOVEI A,200
CAIE "D ; Diablo?
CAIN "d
MOVEI A,301
CAIE "H ; St Helens?
CAIN "h
MOVEI A,307
CAIE "S ; Shasta or SAIL?
CAIN "s
CAIA
JRST CHAT0
INCHWL
CAIE "H
CAIN "h
MOVEI A,300
CAIE "A
CAIN "a
MOVEI A,302
CHAT0: JUMPN A,CHAT1
OUTSTR [ASCIZ/Invalid host name
/]
HELP: OUTSTR [ASCIZ/Legal host names:
DIABLO HELENS IFS SAIL SHASTA
/]
CLRBFI
JRST CHAT
;CHAT1 CHAT2
CHAT1: INCHWL
CAIE ↑J
CAIN 175
CAIA
JRST CHAT1
MOVEM A,HOST
HRROI [003000,,]
TTYSET ; get line characteristics
CAMN [-1]
EXIT ; how can I work if detached?
TLNE (DISLIN\DMLIN\DDDLIN) ; display?
JRST CHAT2
HRROI [001000,,(SPCBRK)]
TTYSET
CHAT2: SETACT [[ 777777,,777777; activate on everything
777777,,777777; just set it up for when we need it
777777,,777777
777777,,600000\BSACT]]
OUTSTR [ASCIZ/ Trying... /]
INIT
SIXBIT/PUP/
OUTBFH,,INBUFH
JRST [ OUTSTR [ASCIZ/Device PUP not available. Try again later./]
EXIT]
INIT 1,
SIXBIT/TTY/
TTYBFH,,
JRST 4,CHAT
MOVEI 8. ; change byte size in buffer header
DPB [300600,,INBUFH+1]
DPB [300600,,OUTBFH+1]
INBUF
OUTBUF
OUTBUF 1,
MTAPE RFCBLK
JRST [ OUTSTR [ASCIZ/Host dead/]
EXIT]
OUTSTR [ASCIZ/Open
/]
PTJOBX [0 ? 3]
LOCK
SETZM GOTINT
MOVEI [ SETOM GOTINT ; got an interrupt
DISMIS] ; set up interrupt server
MOVEM JOBAPR
CLKINT 30.*60. ; keep alive counter
MOVSI (INTBTS)
INTENB ; enable interrupts
; JRST LOOP
;LOOP TTILUP
LOOP: SKIPN GOTINT ; got an interrupt?
IMSTW [INTBTS] ; wait for an interrupt to happen
INTMSK [0] ; mask off interrupts
SETZM GOTINT
TTILUP: INCHSL ; get a byte from the TTY
JRST TTIDUN ; nothing, try input from the network
CAIN ↑M ; if a CR,
INCHRW A ; flush the LF right after it
CAIN 175 ; ALT
MOVEI 33
CAIN 176 ; }
MOVEI 175
CAIN 32 ; ~
MOVEI 176
CAIE 600\"L ; CONTROL-META-L is character mode
CAIN 600\"l
JRST [HRROI [001000,,(SPCBRK)]
TTYSET
JRST TTILUP]
CAIE 400\"L ; META-L is character mode
CAIN 400\"l
JRST [HRROI [002000,,(SPCBRK)]
TTYSET
JRST TTILUP]
CAIE 600\"Q ; CONTROL-META-Q exits
CAIN 600\"q
JRST FLUSH
CAIE 400\"Q ; so does META-Q
CAIN 400\"q
JRST FLUSH
ANDI 377 ; turn off META bit
TRZE 200 ; CONTROL set?
ANDI 37
SOSG OUTBFH+2 ; space in buffer?
OUT
CAIA
JRST TTIDUN
IDPB OUTBFH+1
JRST TTILUP
;TTIDUN TTIDN1 TTIDN2 NTICHR FLUSH CLOSED
TTIDUN: OUTPUT ; flush the output side of things
TTIDN1: SOSLE INBUFH+2 ; data available?
JRST NTICHR
HRRZ A,INBUFH
HRRZ A,(A)
SKIPGE (A) ; anything in further buffers?
JRST TTIDN2
MTAPE INPBLK ; no - new packet available?
JRST [ OUTPUT 1,
STATZ IODEND
JRST CLOSED
JRST LOOP]
TTIDN2: IN ; yes - get it
JRST NTICHR
GETSTS A
TRZE A,IODEND\IODTER ; End seen?
JRST CLOSED
TRZN A,IOBKTL ; Mark seen?
JRST 4,.-1
SETSTS (A) ; yes, clear error status
MTAPE RMRBLK
TRN
MOVE RMRBLK+2 ; get Mark type
;; CAIN 1 ; Data Mark?
;; AOS NTOINP
CAIE 5 ; Timing Mark?
JRST TTIDN1 ; something random
MTAPE SMRBLK ; yes, send Timing Mark Reply
JRST CLOSED
JRST TTIDN1
NTICHR: ILDB INBUFH+1
CAIN ↑G
JRST [ SETO
BEEP
JRST TTIDN1]
CAIN 176 ; ~
MOVEI 32
CAIN 175 ; }
MOVEI 176
CAIN 33 ; ALT
MOVEI 175
SOSG TTYBFH+2 ; output character to TTY
OUTPUT 1,
IDPB TTYBFH+1
JRST TTIDN1
FLUSH: RELEASE ; flush connection
CLOSED: OUTPUT 1, ; flush TTY buffer
OUTSTR [ASCIZ/
Connection closed
/]
EXIT
END CHAT